package Interfaz;

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Monitor;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;

import DTO.DTOGestionarResultado;
import DTO.DTOPuntuacion;
import DTO.DTOResultadoFinal;
import Excepcion.CompetenciaNoPermiteEmpateException;
import Excepcion.EmpateEnEliminacionException;
import Excepcion.EmpateSetException;
import Excepcion.EspaciosVaciosException;
import Excepcion.FaltanPartidosAnterioresException;
import Excepcion.PuntajeNegativoException;
import Excepcion.PuntajeOverflowException;
import Excepcion.ResultadoNoModificableException;
import Negocios.ControlFixture;


/**
 * CU018 - Gestionar resultados de fixture (Resultado final)
 * @author 
 */
public class CU018_res_final {

	protected Shell shlGestionarResultados;
	
	Button btnGanoParticipante1;
	Button btnGanoParticipante2;
	Button btnEmpate;
	
	CU019 pantallaAnterior;
	
	int idCompetencia;
	int idFecha;
	int idPartido;
	
	DTOResultadoFinal dtoResultadoFinal;
	
	public CU018_res_final(int idCompetencia, CU019 pantallaAnterior,
			int idFecha, int idPartido) {
		this.idCompetencia = idCompetencia;
		this.pantallaAnterior = pantallaAnterior;
		this.idFecha = idFecha;
		this.idPartido = idPartido;
		
		ControlFixture controlFixture = new ControlFixture();
		dtoResultadoFinal = controlFixture.getDTOResultadoFinal(idPartido);
	}

	/**
	 * Open the window.
	 */
	public void open() {
		Display display = Display.getDefault();
		createContents();
		
		// Centrar ventana
		Monitor primary = display.getPrimaryMonitor();
		Rectangle bounds = primary.getBounds();
		Rectangle rect = shlGestionarResultados.getBounds();	    
		int x = bounds.x + (bounds.width - rect.width) / 2;
		int y = bounds.y + (bounds.height - rect.height) / 2;	    
		shlGestionarResultados.setLocation(x, y);
		
		btnGanoParticipante1 = new Button(shlGestionarResultados, SWT.RADIO);
		btnGanoParticipante1.setBounds(10, 15, 200, 16);
		btnGanoParticipante1.setText("Gan\u00F3 " + dtoResultadoFinal.getParticipante1());
		
		btnGanoParticipante2 = new Button(shlGestionarResultados, SWT.RADIO);
		btnGanoParticipante2.setBounds(10, 55, 200, 16);
		btnGanoParticipante2.setText("Gan\u00F3 " + dtoResultadoFinal.getParticipante2());
		
		btnEmpate = new Button(shlGestionarResultados, SWT.RADIO);
		btnEmpate.setBounds(10, 95, 90, 16);
		btnEmpate.setText("Empate");
		
		Button btnGuardar = new Button(shlGestionarResultados, SWT.NONE);
		btnGuardar.setText("Guardar");
		btnGuardar.setBounds(10, 138, 108, 32);
		btnGuardar.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				if (btnGanoParticipante1.getSelection() || btnGanoParticipante2.getSelection()
						|| btnEmpate.getSelection()) {
					int idGanador;
					
					if (btnGanoParticipante1.getSelection()) {
						idGanador = dtoResultadoFinal.getIdParticipante1();
					}
					else if (btnGanoParticipante2.getSelection()) {
						idGanador = dtoResultadoFinal.getIdParticipante2();
					}
					else {
						idGanador = 0;
					}
					
					DTOGestionarResultado dtoNuevoResultado = new DTOGestionarResultado(idCompetencia,
							idPartido, -1, -1, idGanador, null, null);
					dtoNuevoResultado.setIdFecha(idFecha);
					dtoNuevoResultado.setAusente1(null);
					dtoNuevoResultado.setAusente2(null);
					
					ControlFixture controlFixture = new ControlFixture();
					
					try {
						controlFixture.gestionarResultado(dtoNuevoResultado);
						
						MessageBox mensaje = new MessageBox(shlGestionarResultados, SWT.ICON_INFORMATION);
						mensaje.setMessage("El resultado ha sido guardado exitosamente.");
						mensaje.open();
						
						shlGestionarResultados.close();
					}
					catch (ResultadoNoModificableException e1) {
						MessageBox error = new MessageBox(shlGestionarResultados, SWT.ICON_ERROR);
						error.setMessage(e1.getMensaje());
						error.open();
					}
					catch (EmpateEnEliminacionException e1) {
						MessageBox error = new MessageBox(shlGestionarResultados, SWT.ICON_ERROR);
						error.setMessage(e1.getMensaje());
						error.open();
					}
					catch (FaltanPartidosAnterioresException e1) {
						MessageBox error = new MessageBox(shlGestionarResultados, SWT.ICON_ERROR);
						error.setMessage(e1.getMensaje());
						error.open();
					}
					catch (CompetenciaNoPermiteEmpateException e1) {
						MessageBox error = new MessageBox(shlGestionarResultados, SWT.ICON_ERROR);
						error.setMessage(e1.getMensaje());
						error.open();
					}
					catch (PuntajeNegativoException e1) {
						MessageBox error = new MessageBox(shlGestionarResultados, SWT.ICON_ERROR);
						error.setMessage(e1.getMensaje());
						error.open();
					}
					catch (EspaciosVaciosException e1) {
						MessageBox error = new MessageBox(shlGestionarResultados, SWT.ICON_ERROR);
						error.setMessage(e1.getMensaje());
						error.open();
					}
					catch (EmpateSetException e1) {
						MessageBox error = new MessageBox(shlGestionarResultados, SWT.ICON_ERROR);
						error.setMessage(e1.getMensaje());
						error.open();
					}
					catch (PuntajeOverflowException e1) {
						MessageBox error = new MessageBox(shlGestionarResultados, SWT.ICON_ERROR);
						error.setMessage(e1.getMensaje());
						error.open();
					}
				}
				else {
					MessageBox error = new MessageBox(shlGestionarResultados, SWT.ICON_ERROR);
					error.setMessage("Debe seleccionar un resultado de la lista.");
					error.open();
				}
			}
		});
		
		Button btnCancelar = new Button(shlGestionarResultados, SWT.NONE);
		btnCancelar.setText("Cancelar");
		btnCancelar.setBounds(145, 138, 108, 32);
		btnCancelar.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				shlGestionarResultados.close();
			}
		});
		
		if (dtoResultadoFinal.getEdicion()) {
			switch (dtoResultadoFinal.getResultado()) {
			case DTOResultadoFinal.GANO_PARTICIPANTE_1:
				btnGanoParticipante1.setSelection(true);
				break;
			case DTOResultadoFinal.GANO_PARTICIPANTE_2:
				btnGanoParticipante2.setSelection(true);
				break;
			case DTOResultadoFinal.EMPATE:
				btnEmpate.setSelection(true);
				break;
			}
		}
		
		shlGestionarResultados.open();
		shlGestionarResultados.layout();
		while (!shlGestionarResultados.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}

	/**
	 * Create contents of the window.
	 */
	protected void createContents() {
		shlGestionarResultados = new Shell(SWT.CLOSE | SWT.TITLE | SWT.MIN);
		shlGestionarResultados.setSize(269, 212);
		shlGestionarResultados.setText("Editar resultado");
		shlGestionarResultados.addListener(SWT.Close, new Listener() {
			public void handleEvent(Event event) {
				pantallaAnterior.actualizar();
				pantallaAnterior.shlFixture.setVisible(true);
				pantallaAnterior.shlFixture.forceFocus();
			}
		});
	}
}
